jdbc

您所在的位置:网站首页 try catch的作用 jdbc

jdbc

2023-03-15 23:12| 来源: 网络整理| 查看: 265

jdbc使用分为五个步骤

一:注册驱动 二:建立与数据库的连接,获得连接对象 三:根据连接对象,获得一个对象 四:根据获得的对象执行SQL语句 五:释放资源(关流)

一:注册驱动DriverManager.registerDriver(new Driver());//因为驱动是分厂家的//使用上述方法会有重复性的操作//所以推荐使用以下方法Class.forName("com.mysql.jdbc.Driver");//上述方法会得到com.mysql.jdbc.Driver类的一个类的对象//首先它会将这个类加载到内存中//当这个类加载进内存后//这个类的静态代码块就会跟着执行//所以在静态代码块中,就已经成功注册了驱动的代码二:建立与数据库的连接,获得连接对象//方法一: Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc", "root", "111111" ); //方法二: Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc? user=root&password=111111"); //? 起到的作用是连接参数 //user是参数名,root是参数值(数据库用户名) //&是与,在参数与参数之间起到连接作用 //方法三: Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc",properties );//创建一个properties对象//用来存储参数,用户名密码Properties properties = new Properties();//以key-value的方式存储properties.setProperty("user","root");properties.setProperty("password","111111"); 三:根据连接对象,获得一个对象//方法一:根据连接对象,获得statement对象Statement statement = conn.createStatement();//上述方法存在SQL注入漏洞所以并不推荐使用//推荐方法如下//方法二://查询表stu中张益达的所有信息//获得预处理对象PreparedStatement pstmt = conn.prepareStatement //?只为一个占位符 ("select * from stu where name = ?;"); // 1 为第一个?号的位置 //假如想往第二个问号里添加参数那么就写2 //假如要使用增删改功能,那么在values后面括号中 //是否有null或是否有具体的值无关 //在sql语句中有几个问号,那么就需要传递多少个参数 pstmt.setString(1,"张益达"); //执行语句并把它传入rs中 //查询使用executeQuery //增删改使用executeUpdate ResultSet rs = pstmt.executeQuery(); //遍历循环输出rs中的内容 while (rs.next()){ System.out.println( "id:"+rs.getObject(1)+"\n"+ "名字:"+rs.getObject(2)+"\n"+ "年龄:"+rs.getObject(3) ); }## 四:根据获得的对象执行SQL语句 ##

//由获取到statement对象,执行sql语句 statement.execute(“你需要执行的sql语句”) //同理 //查询使用executeQuery //增删改使用executeUpdate //在使用executeQuery与executeUpdate他们的返回值为受影响 的行数即为int类型 int a = statement.executeQuery(“你需要执行的sql语句”); //如果使用execute则是布尔类型 //即执行sql语句后,得到了一个ResultSet对象就会返回true //如果得到的是受影响的行数,或者没有得到什么结果,那么返回 false; //得出的结果一般使用xx.next进行while循环遍历输出

## 五:释放资源(关流) ##释放资源即流即使用try catch finally进行关流

public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; //建立集合接收结果并遍历输出 List stus = new ArrayList(); try { Class.forName(“com.mysql.jdbc.Driver”);

conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/jdbc?user=root&password=111111");

// jdbc: mysql://localhost: 3306 /jdbc ? 参数 // 协议 子协议 本机地址 端口号 数据库名字

stmt = conn.createStatement(); //执行查询语句 rs = stmt.executeQuery ("SELECT * FROM stu;"); //判断下一行有没有数据 //如果有数据,会返回true,没有数据的话就返回false //true就循环,false就停止 while (rs.next()){ //创建stu对象,并将数据set进stu对象中 Stu stu = new Stu(); stu.setId(rs.getInt(1)); stu.setName(rs.getString(2)); stu.setAge(rs.getInt(3)); //添加到集合里 stus.add(stu); } for (Stu stu:stus){ //输出一下 System.out.println(stu.toString()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally {// 释放资源 if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

}

在上述代码中使用了javaBean即建一个类封装一个方法进去使用javaBean有两个注意事项1:javaBean中,一定要有一个空参数的构造方法2:javaBean中的属性,可以不是成员变量,但是属性名一定要与表中的字段名一致## JdbcUtil ##使用JdbcUtil会帮助我们更便捷的注册使用Jdbc先建立一个配置文件Jdbcfg.properties来存储我们的驱动,地址与用户密码,更改只需在配置文件更改即可

//驱动类的路径 private static String driverClass=null; //连接数据库使用的url private static String url = null; //用户名和密码 private static String user = null; private static String password = null; private static Connection conn =null; static { try { ClassLoader cl = JdbcUtil.class.getClassLoader(); InputStream stream = cl.getResourceAsStream(“jdbcfg.properties”); //得到流中的数据 //创建一个Properties对象 Properties prop = new Properties(); //通过Properties对象的load方法,加载流中的数据 prop.load(stream); //根据key,获得value driverClass = prop.getProperty(“driverClass”); url = prop.getProperty(“url”); user = prop.getProperty(“user”); password = prop.getProperty(“password”); Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

//写一个静态方法,获取连接对象public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password);}//写一个静态方法,获得stmt对象

public static Statement getStatement() throws SQLException { conn = getConnection(); return conn.createStatement(); } public static void release(){ if (conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void release( Statement stmt){ release(stmt,null);

}//写一个静态方法,来释放资源//如果想要释放Connection对象,需要调用Connection对象的close方法//所以需要将Connection对象传入到release方法中//然后再release方法中调用该对象的close方法//释放资源//statement对象与ResultSet对象同理public static void release( Statement stmt, ResultSet rs){ release(); if (stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } }}配置文件为:driverClass=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/cuser=rootpassword=111111使用时只需 Connection conn = JdbcUtil.getConnection();即可## 批处理 ## 需要向数据库发送多条sql语句时, 为了提升执行效率, 可以考虑采用JDBC的批处理机制.

Connection conn = JdbcUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement (“INSERT INTO stu VALUES (?,?,?);”); pstmt.setInt(1,8); pstmt.setString(2,”僚机”); pstmt.setInt(3,20); //通过这个方法可以实现批处理操作 //调用这个方法后,会将这个sql先存起来,等待执行 pstmt.addBatch();

pstmt.setInt(1,9); pstmt.setString(2,"机长"); pstmt.setInt(3,25); //又存了一条等待执行 pstmt.addBatch(); //执行批处理中存着的sql语句 //批处理中各个sql语句之间执行成功或失败是无联系的 //即使第一条语句会出现主键重复的错误 //也不会影响第二条语句将数据插入到数据库中 //因此推荐使用事物操作 pstmt.executeBatch();## 事物 ##对数据的修改要么全部执行 要么全部不执行事物的编写需要在try catch 中进行

Connection conn =null; try { conn = JdbcUtil.getConnection(); //设置提交方式为手动提交 //开启事物 conn.setAutoCommit(false); //创建一个预处理对象 PreparedStatement pstmt = conn.prepareStatement (“UPDATE 表名 SET m=? WHERE name=?;”);

pstmt.setInt(1,700); pstmt.setString(2,"张大炮"); pstmt.executeUpdate(); pstmt.setInt(1,1300); pstmt.setString(2,"张益达"); pstmt.executeUpdate(); //操作无异常,提交事务 conn.commit(); } catch (Exception e) { //回滚到事物开始之前状态 try { //操作出现异常,撤销事务: conn.rollback(); System.out.println("回滚了"); } catch (SQLException e1) { e1.printStackTrace(); } }

“`

DbUtils

DbUtils是Apache提供的一个开源的 方便我们操作的jdbc的jar包 QuerRunner类,是该jar包的核心类 所有的操作数据库的方法都被封装在这个类中更新, 查询都是使用QueryRunner类



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3